package com.yunpeng.aidevice.biz.service;

import com.yunpeng.aidevice.common.vo.RoleDetailVO;
import com.yunpeng.common.dto.Result;
import com.yunpeng.common.paging.PagingQueryDTO;

import java.util.Date;

/**
 * IRoleBizService 角色业务服务
 *
 * @author : Moore(hemw)
 * @date : 2020-04-15
 */
public interface IRoleBizService {
    /**
     * 新增角色
     *
     * @param roleName     角色名称
     * @param operatorCode 操作人代码
     * @return
     */
    Result<Void> addNew(String roleName, String operatorCode);

    /**
     * 删除角色
     *
     * @param roleCode     角色代码
     * @param operatorCode 操作人代码
     * @return
     */
    Result<Void> remove(String roleCode, String operatorCode);

    /**
     * 角色服务端分页列表
     *
     * @param name        名称左匹配
     * @param pageSize    （页数据数量，1-100，默认10）
     * @param currentPage （当前页码，默认1）
     * @return
     */
    Result<PagingQueryDTO> list(String name, Integer pageSize, Integer currentPage);

    /**
     * 绑定权限到角色
     *
     * @param roleCode       角色代码
     * @param permissionCode 权限代码
     * @param operatorCode   操作人代码
     * @return
     */
    Result<Void> bindPermission(String roleCode, String permissionCode, String operatorCode);

    /**
     * 解除权限绑定角色
     *
     * @param roleCode       角色代码
     * @param permissionCode 权限代码
     * @param operatorCode   操作人代码
     * @return
     */
    Result<Void> unbindPermission(String roleCode, String permissionCode, String operatorCode);

    /**
     * 用户绑定角色
     *
     * @param roleCode     角色代码
     * @param userCode     用户代码
     * @param startTime    起始生效时间
     * @param endTime      生效截止时间
     * @param operatorCode 操作人代码
     * @return
     */
    Result<Void> userBindRole(String roleCode, String userCode, Date startTime, Date endTime, String operatorCode);

    /**
     * 用户解除角色
     *
     * @param roleCode     角色代码
     * @param userCode     用户代码
     * @param operatorCode 操作人代码
     * @return
     */
    Result<Void> userUnbindRole(String roleCode, String userCode, String operatorCode);

    /**
     * 角色详情数据视图
     *
     * @param roleCode 角色代码
     * @return
     */
    Result<RoleDetailVO> detailInfo(String roleCode);
}
